package cn.doitedu.day06

import java.util.Comparator

/**
 * scala中的Ordering和Ordered
 *
 * Ordered是java中Comparable接口的扩展、增强
 * //特质
 * trait Ordered[A] extends Any with java.lang.Comparable[A]
 * 并且扩展了一些更好用的方法，例如：>, < , >= , <=
 *
 * Ordering是java中Comparator接口的扩展、增强
 * trait Ordering[T] extends Comparator[T]
 * 并且也扩展了一些更好用的方法：例如：gt 、lt 、geteq、max、min等方法
 *
 * 在Java中排序，有两种方式，一种是实现Comparable，一种是在调用排序的方式是传入比较器
 */
object OrderingAndOrdered {

  def main(args: Array[String]): Unit = {


    val arr: Array[Int] = Array(1, 3, 5, 11, 22, 8, 9, 15, 23)

    //在程序的上文中，找到用implicit修饰的Ordering[Int]
    val res = arr.sorted(new Ordering[Int] {
      override def compare(x: Int, y: Int): Int = {
        y - x
      }
    })

    println(res.toBuffer)

    val boy1 = new Boy("源哥", 32, 99.99)
    val boy2 = new Boy("行哥", 31, 99.99)
    val boy3 = new Boy("星哥", 36, 9999.99)

    val boys = Array(boy1, boy2, boy3)
    val res2 = boys.sorted
    println(res2.toBuffer)
  }

}


class Boy(val name: String, val age: Int, val fv: Double) extends Ordered[Boy] {

  override def compare(that: Boy): Int = {
    java.lang.Double.compare(that.fv, this.fv)
  }


  override def toString = s"Boy($name, $age, $fv)"
}